package com.tanhua.server.service;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.tanhua.server.pojo.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
@Slf4j
public class UserService {

    @Autowired
    private RestTemplate restTemplate;

    @Value("${tanhua.sso.url}")
    private String ssoUrl;

    private static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * 通过sso的rest接口查询
     *
     * @param token
     * @return
     */
    public User queryUserByToken(String token) {
        //1.定义一个路径用于校验token的路径:nginx的路径+"/user"+token (ssoUrl:表示nginx的路径)
        String url = ssoUrl + "/user/" + token;
        try {
            //2.通过Rest接口校验token,传入路径和要转换的类型的class文件
            String data = this.restTemplate.getForObject(url, String.class);

            //3.若通过校验token返回的数据为空
            if (StringUtils.isEmpty(data)) {
                //3.1则返回null值
                return null;
            }
            //3.返回User对象类型,用MAPPER.readValue的方法将返回的json类型转换为User对象类型
            return MAPPER.readValue(data, User.class);
        } catch (Exception e) {

            //4.若上述代码出现问题,则记录日志信息:校验token出错,并打印错误信息
            log.error("校验token出错，token = " + token, e);
        }
        //5.出现错误,返回null值
        return null;
    }
}
